package com.gupao.javavip.gof.singleton;

/**
 * 注册式单例模式-枚举
 * <p>
 * 优点：简单直接，线程安全。且从JDK层面保证了单例不被破坏
 * 1. 反射破坏：在反射需要用到的Constructor 的newInstance()方法中做了强制性的判断，如果修饰符是 Modifier.ENUM 枚举类型，直接抛出异常。
 * 2. 序列化破坏：枚举类型其实通过类名和 Class 对象类找到一个唯一的枚举对象。因此，枚举对象不可能被类加载器加载多次。
 * 缺点：类初始化时变实例化，提前占用了存储空间，可能造成浪费
 */
public enum RegisterEnumSingleton {
    INSTANCE(new Object());

    private Object data;

    RegisterEnumSingleton(Object data) {
        this.data = data;
    }

    public Object getData() {
        return data;
    }

    public static RegisterEnumSingleton getInstance() {
        return INSTANCE;
    }
}
